# www.numpy.org.cn
import numpy as np
# 自制的数据集
import dataset 
# 绘图工具库
from matplotlib import pyplot as plt
# 1 获取100组numpy数组随机数据
m=100
xs,ys = dataset.get_xy_dateset(m)
# 绘制第一个图
# plt.subplot(121)
# 标题
plt.title("x-y", fontsize=12)

# 绘制填充散点数据 画点
plt.scatter(xs,ys)

# 2 w参数
w=0.1
# 3 预测函数 y=w*x
y_pre = w*xs

# 7 因为学习率和只学习一次 
# 没那么快线性拟合
# 多来几次
for _ in range(3):
    # 4 循环100次 依次取出数据处理
    for i in range(100):
        x = xs[i]
        y = ys[i]
        # 5 这边不理解回去看02方差03梯度下降
        # a = x ^ 2
        # b = -2 * x * y
        # c = y ^ 2
        # 斜率k = 2aw+b
        k = 2*(x**2)*w+(-2*x*y)
        # 学习率alpha
        alpha = 0.1
        # 6 根据斜率k 调整w
        w = w-k*alpha

        # 8.1 先清空下窗口 
        plt.clf()
        # 8.2 重新把点线画上去
        plt.scatter(xs,ys)
        y_pre = w*xs
        # 8.3 限制xy坐标量程 
        #   不然图片的xy轴会根据数据发生变动
        plt.xlim(0,1)
        plt.ylim(0,1.2)

        plt.plot(xs,y_pre)
        # 8.4 让图片更新没那么快 来个延时
        plt.pause(0.01)

# # 8 动态绘制预测函数 y=w*x
# y_pre = w*xs
# # 填充散点数据 划线
# plt.plot(xs,y_pre)

# 9 # 批量梯度下降
# alpha= 0.1
# for _ in range(100):
#     #代价函数:e=(y-w*x)^2=x^2*w^2+(-2*x*y)*w+y^2
#     #a=x^2
#     #b=-2x*y
#     #求解斜率:k=2aw+b
#     k=2*np.sum(xs**2)*w+np.sum(-2*xs*ys)
#     k= k/100
#     w=w-alpha*k
#     y_pre = w*xs
#     #预测函数图像
#     plt.clf()
#     plt.xlim(0,1)
#     plt.ylim(0, 1.2)
#     plt.plot(xs,y_pre)
#     plt.scatter(xs,ys)
#     # 暂停0.01秒
#     plt.pause(0.01)

# 10 还有固定步长的梯度下降